The following text file was captured by me as a result of my call
to Jim Davis' Retreat (713 497-2306) in Houston, Texas. I went
to his board to download GTCTL and GTLOG - two utilities used
with GT PowerComm. Jim came on the line to assist as I
experienced transmission problems. I took the opportunity to ask
questions about GT PowerComm and PC communications. Jim's
response is being presented here as an aid to other `Neophytes"
to PC communications.
<< Raymond Wood >>
... In the vernacular of the communications industry, there are a few
concepts that need to be understood before understanding 'HOW' is
accomplished. For example, the word BAUD. This essentially means 'bits per
second'. In fact, it means something a little different than that, but for
openers, let's say that's what it means.
Now, whenever two machines are going to try to communicate with each other a
couple of things have to be done by both. They must both be set to send and
receive at the same frequencies, for example. The most often used frequency,
today, is 1200 baud. That means 1200 bits per second, as I said before.
Well, most users have no idea what bits are involved in a file transfer or a
message transfer. Let's look at another standard word: BYTE. There are 8
bits of information contained in a byte. That is, a byte is merely a set of 8
bits. Within a set of 8 bits there are 256 permutations available. From all
zeroes to all ones. Each letter in the alphabet and each digit and each other
special character is represented by a predetermined set pattern of those 8
bits. A capital 'J' has a different pattern than a lower case 'j', for
example. Given that that is true, it is easy to see that no more than 128 of
the total possible patterns would be necessary to represent any text. Thus,
we have another 128 that may be used for 'special purposes'. What, for
example? I'll get to that.
The sending of bits (on or off, high or low, in other words binary
information) is, by definition, a binary process. That is, the computers need
only recognize one of two states. The telephone, on the other hand, carries
information that is other than binary. It can faithfully represent different
tones, pitch, and volume. This is called analog rather than binary. The
almost sole purpose of a modem is to translate binary signals into analog and
vice versa. When you are going to send a set of bits across a telephone you
will have to convert those binary 'states' into some form of sound (which is,
after all, what the telphone is designed to best carry). Modulating a signal
from binary to analog is the 'Mo' in Modem. Demodulating an analog signal
back into binary is the reverse and is the 'Dem" in Modem.
If we want the transmission to be highly reliable then we must do more than
simply send the binary information (modulated). We have all heard 'noise' on
a telephone line and without doing more than demodulating into bits, the
receiver will no doubt have a virtually impossible time of being able to tell
what sounds are bits or just plain noise. In some applications, we don't
really care all that much. Examples include the transmission of plain textfiles. Recall that all that was necessary to send any letter, many special
symbols and any digit was a capability that required no more than 128
different combinations of bits. 7 bits are sufficient to represent 128
permutations of those bits. That is, if a byte were only 7 bits long then it
could contain as many as 128 different sets of bits being on or off).
However, a byte is 8 bits long by definition. So, in what is called ASCII
(American Standard Code for Information Interchange) transmissions we can use
the first 7 of those bits to represent data and the 8th bit to represent some
form of insurance or integrity check that the first 7 were received as they
were sent.
This is called using 'PARITY'. You can establish a convention between the
sender and the receiver that every byte WILL have an even number of bits (or
odd) and use the 8th bit to do so at the sending end. If the receiving end
ever gets a byte that has odd parity then it knows that it received the byte
in error (some bit or bits were either added or lost). That is all there is
to parity checking in an ASCII transmission. Not at all very good, but
sufficient for most text.
Program files or data files or even text files that have been compressed
(ARChived) in some way use all 8 bits in every byte to represent information.
So, we have lost the ability to use parity as an integrity check vehicle.
Instead, in every protocol other than ASCII we add either one or two full
bytes to the end of a 'block' of bytes. The block is a fixed length (usually
128 bytes). The purpose of those one or two bytes is to contain what is
called a Cyclic Redundance Check (CRC) character or word. Like parity, the
CRC is constructed at the sending end to create a pattern of bits that
demonstrates that the preceeding entire block of bytes has been received with
integrity. The Receiving end dynamically creates its own CRC from the
information received and compares it to the byte or bytes received at the end
of a block. If it doesn't match then the block must be rebroadcast (requested
by sending to the sender a signal that says: "Negative Acknowledge" - NAK. If
it was ok then it sends an ACK - meaning "Acknowledge", and the next block is
sent.
Now, let's go back to the idea of baud. At 1200 baud, the modems are able to
send and receive 1,200 bits per second. How many bits per byte? Yes, 8, but
not on a telephone line if you are using modems! Instead, we bracket a byte
by sending what is called a start bit before the 8 bits of data and ending
with what we call a stop bit (sometimes 2 - at 300 baud). So, every byte
requires 10 bits, not 8. Thus, at 1200 baud your maximum possible data
transfer rate is 120 characters (bytes) per second!
OK. Now we know what we have to send and how many bits are required and that
there is something called a response from the receiver called either an ACK or
NAK. So why don't we get 120 bytes per second transfers using 1200 baud
modems? Well, we already saw that for every 128 bytes of data, in most
protocols, we send an additional one or two bytes of CRC. We DO NOT count the
CRC byte(s) as data! Yet it takes time to transmit. Also, it takes time for
most protocols to turnaround and react to the ACK or NAK. For example,
assuming all is well, the sender has a few hundred blocks to upload to the
receiver. After the first block is sent he, by convention, must wait for thereceiver to analyse the CRC and decide if it is going to respond with the ACK
or a NAK. Then it takes a moment to send that to the sender who, in turn, has
to receive it, verify that it got here properly (was not just noise) and
decide whether to send the next block or to resend to last one that was
improperly received by the receiver. That takes time. All time used as
described above is called 'overhead'. Overhead does not include the
transmission of DATA, only control bits and time. Thus, it is impossible to
get to an effective DATA transmission rate of even 118 characters per second
let alone 120 (CRC, etc). But, we know that the telephone is capable of
carrying sound in both directions simultaneously. So, why should the sender
have to wait for the receivers ACK or NAK? This mode of operation is often
called 1/2 duplex, by the way.
The answer, of course, is that it does so only by convention. Newer protocols
do not wait. They assume that a transmission will be successful and will
result in getting an ACK. So they go immediately to the task of sending the
next block. Always listening, of course, for that ACK or NAK. When it is
received as an ACK all is well and we have gained performance. If not, the
software has to decide which block or blocks have to be rebroadcast. In order
to do that it should be obvious that the ACK or NAK is not simply a single
byte. Rather, it includes a byte that is called the packet number (0 to 255),
and possibly more information. If an ACK is received the recipient knows
which of a series of blocks(packets) it is referring to. Similarly it would
know with an NAK. Yep, more bits and more overhead!
Well, then let's see if I can get to a few more contemporary terms and
information more practical to know at this time.
For example, almost nobody uses ASCII transfers any more. Why should they
when they are so poorly controlled and when you realize that ONLY
un-compressed raw text can be sent with it? Still, a great many first time
communications users try to do so.
And, while the transmissions will appear to work, the resulting files will be
garbage, of course. Only 7 oF the 8 bits are being transmitted in each byte!
Many comm programs will allow you to use ASCII even when they should know that
the result will be unsatisfactory. For example, if a filename ends with COM
or EXE then, again by convention, that file is an executable program. ALL
such programs use 8 bits in every byte and could not, therefore, be
transmitted via ASCII. Some comm programs will not let you try to do
something that stupid (only, of course, to a knowledgeable user).
What are the protocols that currently exist in wide spread usage across the
country? The most frequently seen is called XMODEM. This protocol is quite
reliable (about 96%) and uses blocks of 128 bytes plus one CRC character at
the end of every block. It is because it uses only one CRC character that the
reliability is only 96%.
Another is called XMODEM/CRC. This is exactly the same as XMODEM but it uses
two CRC characters. The result is that the effective performance is reduced
insignificantly (1/130th), but the reliability is increased to about 99.6%. In any case where you have a choice between the two you would, of course, opt
for XMODEM/CRC.
Then, and this is particulary true in environments where one of the computers
being involved is either a mini or a mainframe, there is a protocol which is
called Kermit. I believe it uses 128 byte blocks and other overhead such as a
'header block - block zero' that provides control information. It is also
very reliable (99.6% I believe) but it is SLOW!!! It is used only if that is
the only protocol available.
Then there is what is called YMODEM. This protocol differs from the earlier
ones in that it sends 8 - 128 byte blocks together as a 'super block' before
it sends the two byte CRC word. As a result it is the fastest protocol that I
have ever seen for micro computers that use 'dumb' modems (ie, non self
correcting ones). There are two times when one should not use this protocol
if there is a choice: 1) when the line noise is great on the telephone (for a
retransmission of a 'block' that failed involves 1024+2 bytes even if only one
bit was gained or lost). That is a lot of overhead! And 2), in an
environment like PC-PURSUIT that involves long duration hand shaking
turnaround delays.
Another protocol is called Telink. Telink uses 128 byte blocks but has an
advantage over the other ones. It results in a file that is exactly the same
size and has the same date and time stamp on it as the one being sent.
Ymodem, for example, adds to (pads) a block until it is exactly 1024 bytes
(the last record) even if that record only contains a few bytes of data.
GT PowerComm has a unique protocol called 1kTelink. It is the same as Telink
except it uses 1024 byte blocks and is therefore more efficient. Like YMODEM,
1kTelink should only be used on clean phone lines for performance, but unlike
YMODEM it can be used on even a short file with efficiency.
In the case of GT, and then only if communicating GT to GT, if either YMODEM
or 1kTelink experience a set of 6 errors during the transmission of a single
file then it will automatically fallback to 128 byte blocks to greatly
increase the odds that the transmission can be completed and to greatly
increase the efficiency on what is presumed to be a noisy line!!! Neat!!!
The BEST protocol at this time for use in a PC-PURSUIT environment is called
Wxmodem which stands for 'Windowing Xmodem'. This uses 128 byte blocks but it
does not wait between blocks for a response. It is always listening for those
ACKs and NAKs, of course. Extremely high performance is the result, relative
to Xmodem or the other 1/2 duplex protocols. Wxmodem tries to stay 4 blocks
ahead of the receiver at all times while the receiver tries to get 'caught
up'. The difference between the block being sent and the most currently
received ACK or NAK is called the window (a number between 1 and 4).
Then there are two more odd protocols that have become relatively visible of
late. These are called ZMODEM and Batch-YAM. ZMODEM was designed for use in
a PC-PURSUIT like environment. Like WXMODEM, the best protocol for use in
that environment, ZMODEM does not wait for ACKs and NAKs. Unlike WXMODEM,
ZMODEM is relatively slow. For one reason, it uses no buffering. Thus every512 bytes of data it must make another disk access. Batch-YAM is much like
YMODEM except that it allows you to specify a set of file names (a 'batch' of
them). It is slower than YMODEM except, possibly on PC-PURSUIT.
What must a user know to do a file transfer? What protocol is available on
BOTH ends of the transmission, the file name of the file on his end and the
file name on the other end. That is, if the receiveing end of a transmission
already has a file with the name of the file you want to send to it, naturally
you will call the new file something else. Thus, every comm program allows
the specification of the file name on your end and then the name on the other
end. (It is not just an irritant that you 'already' typed that in, it is
necessary). Having said that I must make an exception - Telink and
1kTelink. These protocols allow batch names, like Batch-YAM, but the
receiving end and transmitting end file names are the same.
That's it for now.
Wood: I have a few questions. ok?
Davis: Sure.
Wood: Four to be exact.
1- You mention date/time stamp on one of your protocol descriptions but did
not define its use prior to that. What is this and what is it used for?
PC-DOS or MS-DOS marks every file with the date and time that file was created
or last modified. So, let's say I want to send you a copy of my transmission
log that was dated 12/31/86 (by DOS). If I use any protocol other that Telink
the resulting file on your end will be dated with the date and time it was
created (ON YOUR SYSTEM!) Today, now. Telink creates that file and leaves it
on your system with my date and time stamp still intact.
When I receive an ARCed file this time/date stamp is in the EXE module
somewhere?
Davis: It is several places in that example. In the directory record on your
disk is the formal residence of the stamp. So, in the case of an ARC file, it
has a date and time stamp. Additionally, within the ARC file each record,
which is merely another way of saying 'each file within the ARC file', has the
date and time that THAT file had in its directory record BEFORE it had been
ARCed into the ARC file. When you unARC, the resulting file will not have
todays date and time as a stamp but the one recorded within the ARC file for
it.
Wood: Good, I understand perfectly. I can relate it to what we sometimes do
on the mainframe.
2-You mentioned padding with YMODEM. What is this? Does the receiving end
recognize the padding and discard it automatically?
Davis: Let's say the file you want to send is exactly 1025 bytes long.
Each block transmitted by YMODEM contains 1024 bytes of date plus 2 bytes of
CRC. It will, therefore, take two blocks to send that file. The second block
will contain only 1 byte of data plus 1023 padded "blanks" - actually End Of
File marks. YMODEM sends 1024 bytes every time!. The receiver does not
automatically strip those padded bytes. Indeed, it passes them to the
resulting file so that it will always be an even multiple of the 1024. Thus,
you sent a 1025 byte file and it becomes a 2048 byte file!! Wood:
Ok--3...You came to a conclusion without what I thought was the necessary
support when you said "...thus 512 bytes result in a disk access with
ZMODEM..."
I did not follow the conclusion. Help!
Davis: Sure. As we discussed before the tutorial when we talked about
buffers, a buffer is a fixed length (amount) of memory, sufficient to contain
some number of blocks of data. In the case of ZMODEM, a block is 256 bytes,
by the way. If the protocol used buffers there could be some large multiple
of 'blocks' in memory awaiting transmission. Instead, ZMODEM does not use a
buffer. Thus, it must have in memory only one sector of data at a time. In
the PC world, a sector is 512 bytes, or two blocks of data as far as ZMODEM is
concerned. Again, since that is the case, after two blocks (512 bytes),
ZMODEM must go back to the disk to get more data to transmit.
Wood: One of the first things we learned in programming school 20+ years ago
was that you could do things a lot faster with more than one buffer. WE
typically (or the system) use at least two. Why would ZMODEM not use any? Is
there a memory problem?
Davis: I can't speak for the authors of ZMODEM but I will say that it is
typically not a protocol that is written into a program like GT PowerComm (As
is Xmodem or Wxmodem, etc.). Instead, it comes rather conveniently in the
form of an EXE program that can be run independantly of the comm package or by
a simple shell out of the comm package to it. In the latter case, there is no
way to know how much memory might be available in the majority of systems.
The program itself, could, of course, simply find out. But you will recall
that BOTH ends of a transmission are highly dependant upon compatible
software. It might be that the author of ZMODEM simply took the easy way out.
I don't know.
Wood: This leads nicely into my final question which deals with today's comm
packages. When I first bought my PC I did the necessary research by reading
reviews and magazines like Software Digest. I rejected XTALK and settled on
HYPERACCESS. After I started using it I discovered Shareware. I have come to
the conclusion that there are two classes of products in the Micro world
today. Commercially developed and other. My company uses XTALK. In the
corporate environment you order a comm package and you get what the corporate
gurus decide is best for you. I like ProCommm. I do not like to feel that
I was ripped off by buying HyperAccess. I just feel that I was uninformed at
the time. In this area ProComm seems to reign as King with the majority of PC
users. 4- What are the advantages of GT over ProComm?
Davis: Excellent question. Let me try to deal with it professionally instead
of from the bias I would naturally have for GT PowerComm. (When I wrote the
documentation for GT I twice called it ProComm - how embarrassing it would
have been if I had released it without an edit). Let's go back a little in
time.
Before the era of the PC virtually all micro computers were 8 bit in design
rather than 16. At that time the undisputed King in the area of comm packages
was Crosstalk. It enjoyed an excellent reputation and was well supported.
Further, it was not terribly expensive and it was one of the only comm
packages that supported what was to become a whole set of protocol transfer
methods (it was an XMODEM protocol). Well, in those days if your comm package
didn't work reliably and you were not sure if it was a hardware problem or a
software problem you simply put up Crosstalk. If it worked the conclusion was
that the problem was software. It was THAT reliable.
Along came the PC's. Crosstalk was ported to the 16 bit world, but in a way
that made very little progress in terms of adapting to the capabilities of the
PC's. To this very day, I believe it is impossible to change directories in
Crosstalk, though I could be wrong. In essence, Crosstalk continues to be
available and though it runs reliably in a 16 bit environment it runs like it
was in a CP/M environment, not a DOS one.
Then there was a leading contender from the shareware world called QMODEM. It
enjoyed an excellent following and was remarkably efficient by comparison to
Crosstalk - MUCH faster, in fact. And, it had a couple of contemporary
protocols not available in Crosstalk. It took off and has been a very
successful product ever since. In my opinion it would still be a champion
product save only for a few 'author' problems. It is a great program,
nonetheless.
About the same time the Hayes Modem manufacturers introduced SmartComm II as a
commercial product and it was being shipped with many of their modems. By
brand identification it was accepted. This, despite that it is the clumsiest
of all the comm packages I have ever seen. It was, furthermore, not very
efficient by comparison to QMODEM. It has essentially been unchanged since
its introduction (Sound like Crosstalk all over again?)
A new comm package hit the scene called ProComm. In this program the author
spent a great deal of attention to 'image'. He used imaginative ideas like a
whistle that announced opening and closing of windows, the windows themselves
were innovative, etc. It was no where near as efficient as QMODEM, but it
captured the imagination of the users. And, like QMODEM, the price was right
- $0 to try it out, and then if you decided to, you sent them a small check -
but that's shareware. Procomm has advanced far faster than QMODEM in terms
of incorporating different protocols and the incorporation of what is called a
Host mode, or unattended mode of operation (autoanswer of modem, etc.) It
became King as you call it by being both innovative and current - but not by
being efficient, though it is quite respectable.
GT PowerComm was only formally announced to the shareware world on the 21st of
last month!!!(2/21/87). It includes 8 protocols, not including the alsopresent ASCII, of course. At 2400 baud, I routinely establish DATA transfer
rates of 235.5 characters per second with it, while the best I ever got with
Qmodem was about 220 and with Procomm about 218. Actually, I did get a 225
once with Qmodem, but only once. So, in terms of performance, nothing has
come close to being as fast as GT PowerComm. But that, as we saw with
Procomm, is not all that the user is looking for. We have incorporated an
extremely rich function called the LOG. Into that log is recorded all
connects, disconnects, messges to the host, passwords used to gain access, bad
passwords tried, and even more interesting, the names and time to trasmit
every file that goes from the GT to or from another computer, and along with
that is the total byes involved and the name of the protocol used in the
transmission and, finally, manually created notes and messages.
So what, you might ask. I would answer that if you were the Sysop of a board,
or of a Corporate system, you MUST be able to determine who sent you a file or
a messgage and when. (Yes, date and time stamps are included in all entries
in the log). For example, what would be your reaction if you found that a
program on your disk was a trojan horse if you could not determine where it
came from? Or, say you created a proforma for your department and it has been
downloaded by 18 different executives before you discover a major error in it.
Wouldn't you want to be able to determine who has received that file? All
those kinds of questions are automaticlly answered via GT's log and GTLOG.
The main reason for feeling that there is a substantial difference between GT
and Procomm for the user is in the area of SUPPORT. I take it that it has
occurred to you that I have been talking to you for more than three hours
already? And I don't even know if you are a registered user of GT. Well, I
am only one of two of us that do exactly the same thing. The author of GT
PowerComm, Paul Meiners, provides 24 hour a day access to his system as I do
(as the author of the companion software). We have provided many new versions
of GT powerComm over the past year and are about to provide release 12.10 only
two weeks after announcing 12.00 on the 21st! Why, because we are constantly
enhancing the products and our users want us to do so. We have several major
clients already including one of the major Oil companies, one of the major
airlines and one of the countries largest school districts!!! Finally, nobody
has a better Host mode than GT PowerComm!!! I run a BBS using nothing else.
That is power and function! Try it, you'll love it!!
Wood: I can't wait to put the system together! Rest assured that I will
register the program. As an ex-programmer I know what is involved. I wish
the product much luck. Did you say 3 hours?
Davis: I believe so. I don't remember, but I reset the 1 hour time limit I
gave you twice now, possibly three times. By the way, as a favor to me in
exchange for the time, would you mind terribly ARCing your capture file and
sending me a copy. I can make it available as a tutorial to others. And if
you will make it available to others as well, it is possible that they will
come to know GT PowerComm as well.
Wood: No problem. I will not be able to do this for a couple of days however.
My modem is on the blink and I am waiting for a replacement. I will upload GTand the Log and CTL files to all of the bulletin boards that I normally deal
with. I have already uploaded it to the corporate BBS. I do expect to get
some healthy ribbing from the ProComm lovers which is why I asked the question
that I did. For now though I would like to get the Log file.
Davis: Thanks for the opportunity to be of help. I too must get to work.
So, I'll take you out of chat mode. Don't forget to 'close' your capture